#include<iostream>
#include<cstdio>
#include<cstring>
#include<unistd.h>

int main()
{
//这些是库函数
     printf("hello printf!\n");
     fprintf(stdout,"hello fprintf!\n");
     const char *s = "hello fwrite\n";
     fwrite(s,strlen(s),1,stdout);

//系统调用
     const char *ss = "hello write!\n";
     write(1,ss,strlen(ss));    //系统调用

//在程序的结尾加上开辟子进程
     fork();
//加上之后再编译重新输出  把程序跑起来（就会发现正常打印还是四条）
//但是重定向到文件   就会发现除了系统调用只有一个（其余都是两份）
//因为在 fork的时候对应缓冲区里的三条消息都还在缓冲区内，fork的时候父子进程各自刷新一次（所以各有两次）
//系统调用直接就刷给了操作系统   不存在用户层刷新了


//如果是往显示器上打就是行刷新  \n 就会直接刷新
//a.out  是往显示器写入行缓冲刷新       
//一旦发生了重定向，就是往显示器文件中写入，显示器文件在磁盘，一般是全缓冲刷新，更改了刷新方式



////下面两个都是 标准输出进行打印   stdout   cin
//   std::cout<<"hello cout!\n"<<std::endl;
//   printf("hello printf!\n");
//
////这两行是向标准错误写入
//   std::cerr << "hello cerr"<<std::endl;
//   fprintf(stderr,"hello stderr\n");   //按照指定格式去打印



   return 0;
}

